//
// Copyright © 2025 Hardcore Engineering Inc.
//
// Licensed under the Eclipse Public License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. You may
// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//
// See the License for the specific language governing permissions and
// limitations under the License.
//

export function getCondition (
  table: string,
  dbField: string,
  startIndex: number,
  param: any,
  type: string
): { where: string, values: any[], index: number } | undefined {
  const conditions: string[] = []
  const values: any[] = []
  let index = startIndex

  if (param !== null && typeof param === 'object') {
    if (param.less !== undefined) {
      conditions.push(`${table}.${dbField} < $${index}::${type}`)
      values.push(param.less)
      index++
    }
    if (param.lessOrEqual !== undefined) {
      conditions.push(`${table}.${dbField} <= $${index}::${type}`)
      values.push(param.lessOrEqual)
      index++
    }
    if (param.greater !== undefined) {
      conditions.push(`${table}.${dbField} > $${index}::${type}`)
      values.push(param.greater)
      index++
    }
    if (param.greaterOrEqual !== undefined) {
      conditions.push(`${table}.${dbField} >= $${index}::${type}`)
      values.push(param.greaterOrEqual)
      index++
    }
  }

  if (param != null && conditions.length === 0) {
    conditions.push(`${table}.${dbField} = $${index}::${type}`)
    values.push(param)
    index++
  }

  if (conditions.length === 0) return undefined

  return { where: conditions.join(' AND '), values, index }
}
